プログラミングやRPG(作るほう)が好きな人の日記
このホームページは毎日 夜11時にアクセスできなくなります。 朝6時半に再開されます。(世の中のネット依存対策として) 例外で、アクセスができる場合があります。aboutThisWebsite を参照してください。 URL は https でもアクセスできます。 黒猫画像はクリック(タッチ)すると消えます。 NO PC WEEK とは私自身の健康のために私のパソコンの使用を制限する期間です。 【【 私自身へ、記事の先頭に5W1H を書くといいかも 】】 |
No. | A.(ついでに 勉強1問) |
B. PC使用 開始時刻 |
C. 予定使用時間 時間:分 (当日限度時間 時間:分) |
D. 予定終了時刻 | E. 実際終了時刻 | F. 実際使用時間 時間:分 (当日限度時間 時間:分) オーバー理由 |
G. 判定 | H. 作業内容 |
---|---|---|---|---|---|---|---|---|
170 | ◎ | 11:10 | 1:00(3:00) | 12:10 | 12:25 | 1:15(3:00) | ○ | 8月扉スクリプト |
169 | ◎ | 19:45 | 1:00(3:00) | 20:45 | 21:17 | 1:32(3:00) 当初のイメージを求めた |
× | 8月扉スクリプト |
168 | ◎ | 14:10 | 1:00(3:00) | 15:10 | 15:35 | 1:25(3:00) | △ | 8月扉スクリプト |
167 | ◎ | 11:50 | 1:00(3:00) | 12:50 | 13:14 | 1:24(3:00) | △ | 8月扉スクリプト |
166 | ◎ | 23:45 | 1:00(2:00) | 0:45 | 1:18 | 1:33(2:00) デバッグできず |
× | 8月扉スクリプト |
165 | ◎ | 22:00 | 1:00(2:00) | 23:00 | 23:14 | 1:14(2:00) | ○ | 8月扉スクリプト |
164 | ◎ | 20:50 | 1:00(2:00) | 21:50 | 22:05 | 1:15(2:00) | ○ | 8月扉スクリプト |
163 | ◎ | 18:55 | 1:00(2:00) | 19:55 | 20:08 | 1:13(2:00) | ○ | 8月扉スクリプト |
162 | ◎ | 21:25 | 1:00(2:00) | 22:25 | 23:00 | 1:35(2:00) おもしろすぎたから |
× | 8月扉スクリプト |
161 | ◎ | 19:00 | 1:00(2:00) | 20:00 | 20:11 | 1:11(2:00) | ○ | 8月扉スクリプト |
160 | ◎ | 19:05 | 1:30(3:00) | 20:35 | 20:47 | 1:42(3:00) | ○ | 8月扉スクリプト |
159 | ◎ | 15:45 | 1:30(3:00) | 17:15 | 17:25 | 1:40(3:00) | ○ | 8月扉スクリプト |
158 | ◎ | 22:20 | 1:30(3:00) | 23:50 | 0:14 | 1:54(3:00) | △ | 8月扉スクリプト |
157 | ◎ | 19:30 | 1:30(3:00) | 21:00 | 21:05 | 1:35(3:00) | ◎ | 8月扉スクリプト |
156 | ◎ | 21:25 | 1:00(2:00) | 22:25 | 22:38 | 1:13(2:00) | ○ | 8月扉スクリプト |
155 | ◎ | 18:40 | 1:00(2:00) | 19:40 | 19:46 | 1:06(2:00) | ◎ | 8月扉スクリプト |
154 | ◎ | 20:25 | 1:00(2:00) | 21:25 | 21:42 | 1:17(2:00) | ○ | 8月扉スクリプト |
153 | ◎ | 18:15 | 1:00(2:00) | 19:15 | 19:22 | 1:07(2:00) | ◎ | 8月扉スクリプト |
152 | ◎ | 22:39 | 1:00(2:00) | 23:39 | 23:45 | 1:06(2:00) | ◎ | RPG試作 |
151 | ◎ | 18:35 | 1:00(2:00) | 19:35 | 19:41 | 1:06(2:00) | ◎ | RPG試作 |
150 | ◎ | 21:15 | 1:30(1:30) | 22:45 | 23:05 | 1:50(1:30) | △ | RPG試作 |
この表に記録していない作業あり: 長時間 記事作成 | ||||||||
149 | ◎ | 21:45 | 1:00(1:30) | 22:45 | 22:48 | 1:03(1:30) | ◎ | RPG試作 |
148 | ◎ | 20:10 | 0:30(1:30) | 20:40 | 20:42 | 0:32(1:30) | ◎ | RPG試作 |
147 | ◎ | 22:30 | 1:30(1:30) | 0:00 | 0:10 | 1:40(1:30) | ○ | RPG試作 |
146 | ◎ | 22:10 | 2:00(2:00) | 0:10 | 0:23 | 2:13(2:00) | ◎ | RPG試作 |
145 | ◎ | 22:20 | 1:30(1:30) | 23:50 | 23:52 | 1:32(1:30) | ◎ | RPG試作 |
この表に記録していない作業あり: 長時間 アセンブラ学習用の小型液晶準備と、記事作成 | ||||||||
144 | ◎ | 20:35 | 1:30(3:00) | 22:05 | 22:02 | 1:27(3:00) | ◎ | RPG試作 |
143 | ◎ | 16:20 | 1:30(4:00) | 17:50 | 17:50 | 1:30(4:00) | ◎ | 調べもの |
142 | ◎ | 21:30 | 1:30(1:30) | 23:00 | 23:05 | 1:35(1:30) | ◎ | RPG試作 |
141 | ◎ | 19:30 | 1:30(1:30) | 21:00 | 21:07 | 1:37(1:30) | ◎ | RPG試作 |
140 | ◎ | 20:55 | 2:00(4:00) | 22:55 | 23:05 | 2:10(4:00) | ◎ | RPG試作 |
139 | ◎ | 16:00 | 1:00(4:00) | 17:00 | 17:03 | 1:03(4:00) | ◎ | トップページ |
138 | ◎ | 10:45 | 1:00(4:00) | 11:45 | 11:51 | 1:06(4:00) | ◎ | トップページ |
この表の意図:
多くの人はパソコンのやりすぎやネットゲームのやりすぎには困っていると思います。
参考に言うと、この表を使う前の私は 1 回の PC 使用時間がノンストップで 17 時間というときもあったし、平均で言うと毎日 9 時間はやっていたと思います。
そういう徹夜とか長時間作業をするよりも、昼間の短時間作業のほうが生産性は高いのでは? と数年前から考えてきました。
パソコンの使用時間を事前に決めて、ネット上に公開することで、パソコンのやりすぎを防止できるかどうかこの表を使って試しています。
記入の法則:
例外事項:
廃止事項:
以下の事項は実施できないので廃止する。
中途結果:
結構いい結果になっています。炊事や掃除、散歩、早起きなどが好ましいリズムでできるようになりました。
(2020年9月6日追記:散歩、早起きは最近あまりできていません。掃除や炊事は理想的にできています)
この取り組みが、15才~18才くらいまでの高専(中退)に所属していた時に実施できていたら良かっただろうなと思います。でもそれくらいの年齢では経験が浅く、このような効果的なルール作りを行うことはできなかったと思います。自分は人に比べて「創作意欲」や「ゲームで遊ぶ欲望」におぼれやすいところがあり、そのコントロールはとても難しいです。
ちなみに、分単位で記録を取ったりして、だいぶマメに見えるかもしれませんが、Windows の日本語入力(MS-IME)で「いま」と入力し、 変換 キーを押さずに ↑ ボタンを押すと現在の時刻になります。道具の便利さが人をマメに見せるのかもしれません。
8/19 の日記の、「お盆休みの成果」という話題で、海水浴場の混雑状況について、
というリンクを設置しましたが、そのリンク先がおかしかったのを直しました。
日ごろからこのウェブページの記事作成において、長文のために時間がかかりすぎて体力も消耗して困るので、試験的に「記事の作り方を制限」してみます。
訪問者の方もあんまり長文ばかりだと読めないでしょうし…。
長文でなければ表現できない内容もあると思いますが、とりあえず以下のような制限のもと、記事作成してみたいと思います。
ツイッターが全角140文字という制限の中でコミュニケーションされているので、それと同じように、この制限の中で記事を表現できればと思います。
でも、下の「女性の名を表計算から導く」の記事のように(私が勝手に思っているだけかもしれませんが)、「懇切丁寧に記事を作成して初めて読み手は理解できる」というのもあるので、どこまでできるか、ほんとに試験的なこころみです。
1)5W1Hを表す文章
2)記事の主要コンテンツ(画像、プログラム、写真)
3)説明文 3行まで(お店のポップは基本的に4行以上は読まないという経験から)
4)手順を示すリスト(結果にたどり着けば良いのであって、意味や余計な説明は書かない)
5)必要なもの等を示すリスト(必要なものが用意されれば良いのであって、同じく余計なものを書かない)
6)注意点数行
※息抜き的な挿絵を入れたい場合はその記事とは別に時間を取って作図する。
なんでもいいけど、あんた
制限するの好きねぇ… |
電子機器組み立て1級の学科の復習をしていて「テルル化ビスマス(Bi2Te3)」という半導体素材の名前が出てきました。
この「テルル」というのが女性の可愛らしい名前に思えて、そういえば「アルル」ってあったよなと連想されました。(ぷよぷよ)
テなのかアなのかという違いで、そこを変えれば他にもありそうです。
RPG でも小説でも何でも、架空の人の名前を考えるのって大変ですよね。
今回はその近道のお話をします。
以前にも同じような話をしたことがあります。
「暗黒城の」+「魔術師」=「暗黒城の魔術師」ならば、
前を切り替えて、「悠久の」+「魔術師」、「地下迷宮の」+「魔術師」、「時空の」+「魔術師」、
後を切り替えて、「暗黒城の」+「戦士」、「暗黒城の」+「姫」、「暗黒城の」+「使用人」、
などなど、表計算でいろいろ出てきますよ、という話でした。(記事はハプニングで消えました)
そうやって名前を導き出すと、インスピレーションを与えられます。
地下迷宮の魔術師? いそうですねぇ…。 地下の奥深くで何をやっているんだ?
暗黒城の姫? どんな姫ですか?? 過去に捕らわれたけど住めば都で住み着いたとか? などなど。
「形容詞」+「名詞」の組み合わせ次第で、いろいろな印象の言葉ができ、想像力を働かせることができます。
今回はそれを「女性の名の構成」でやってみましょう。
表の左端(下表ピンクの列)に名前の前半を並べ、表の上端(下表オレンジの行)に名前の後半を並べて、各セルには前半と後半をつなげた文字を表示するようにします。すると網羅的に名前を作成することができます。
使えない名前が多い中、使えそうな名前をちらほらと見つけることができます。
それは聞いたことのある名前の場合もあれば、いまだかつて聞いたことのない良い名前の場合もあります。
その名前を自分の創作のキャラに名付けたら…と想像して使えるかどうか具合を確かめてみます。
…表計算ってクリエイティブですね。
これは Microsoft Excel で行いましたが、確認したところ無料の Libre Office でもできたので、興味のある人は Libre Office でやってみてください。
できましたか?
右に増やすことができました。
下に増やすことができました。
最後に、簡単に装飾して、このように完成!
電子機器組み立ての勉強では、テルルの他に、セレン(Se)という名前も出てきます。
この名前を適当に「セ」と「レン」に分割して、表の左端と上端に記入し、アレン、イレン、ウレン、カレン、キレン、クレンなどなど見つけていきます。
「セ」と「レン」ではなく、「セレ」と「ン」に分ければまた別の組み合わせが出現するので、その辺は自由に分割します。
「セレ」と「ン」に分けた場合、すでにある「ア」と新しい「ン」で「アン」が出現します。
その「アン」と何かがくっつきそうだと思ったら、アンを左端に追加してみます。
そのときもし上端に「ナ」があれば、「アンナ」が出てきます。
このように、表の左端と上端に入れる文字に迷ったら、すでに世にある名前を自由に分割して記入してみましょう。
出現した名前もさらに何かとくっつくので試してみましょう。
(アンナを上端に入れると、「ジョアンナ」とか「ポリアンナ」とか…、つきないですね)
その調子で遊べると思うので、やってみてください。
今回の表で表現したのはごく一部だと思います。「ファ」とか「ルナ」とか他にもいっぱいあります。
要領を得たら、地名も作れそうですね。
「アレフガルド」をもとにして「ムーンガルド」「ムーンバーグ」、実在の「バイエルン」や「ミュンヘン」を分割して、くっつけて「バイヘン」「ミュン・エルン」。
創作する際に無から名前を考え出すのが苦手な人はこの方法を使ってみてください。
データを縦横に並べて、その組み合わせをまんべんなく見渡す。。見渡すと良いものが見つかる。
この「データを鳥瞰して網羅し、良いものを算出する」というやり方、どこかで見たことありませんか?
人に代わって、一番良いアイデアを提案する――― AI ?
AI も過去の多くのデータを網羅して、そのデータの傾向を導き出して、人間が欲しい「一番いい提案」、「グッドアイデア(だっけ?)」を出力してくれます。
今回紹介した表計算はごく単純な方法ではあるものの、はやりの AI と似ているんじゃないかと思うんです。
人が頑張って考えた名前を、この表計算はいとも簡単に作り出してしまう!
人が頑張って習得した技術を、AI はいとも簡単にこなしてしまう!
AIに対して抱く、人の肯定的な気持ちと、否定的な気持ちが、この表計算にも当てはまる気がするんです。
このやり方は必ずしも、見せられた人が喜ぶとは限らないということを、注意点として覚えておいてください。
将棋においても、コンピューターでパターンを網羅するというのは羽生さんが実現して以来、新しい時代の流れとして受け入れられてきたと思いますが、そういうやり方をいまだに否定的に感じる人もいるんじゃないかと思います。
「コンピューターでの網羅」を人々が認知し認めている業界と、まだそうなっていない、またはこれからもそうならない業界という3つくらいの違いがあると思います。
AI という技術に多くの人が喜んでいると同時に少し戸惑ってもいる(仕事を奪われるから)という現状を注意深く観察しましょう。
今回紹介した表計算は、一人でちょっと遊ぶ程度に遊んでほしいと思います。
コンピューターまかせで、出現させるものなので、場合によっては「放送禁止用語」が出てくることもあり得ます。その場合は普通に そのセルをクリックしてキーボードの DEL キーを押して消してください。
この表の各セルは、
=$B9&C$8
※この計算式は Excel でも LibreOffice でも動きました。
という計算で、"左端のセル + 上端のセル" という意味になっています。
「&」はセル同士を文字列としてつなげるという意味があります。
この B9 と C8 それぞれ固定したい部分に $ を付けることで、セルをコピーしたときにそこだけ固定する、という機能を付けられます。
その機能がない場合とある場合で説明しましょう。
その機能がない場合:
=B9&C8 とした場合は$がついていないのでその機能がありません。そのセルを斜め下にコピーすると、行が1つ進んで列も1つ進むので 、列を表すアルファベットが1つ進み、行を表す数字も1つ進んで C10&D9となります。例の表で行うと「イルルアルダ」となってしまいます。
その機能がある場合:
=$B9&C$8 とした場合は$が付いているのでその機能があります。そのセルを斜め下にコピーすると、機能がない場合のように C10&D9 とはならず、$B10&D$8 のように$が付いた部分(赤い部分)は変化せず、$が付いていない部分だけが変化します。例の表で行うと「イルダ」となり、意図した結果です。
こうすることで、表内のどのセルも、常に表の左端と上端を固定して参照してくれるようになります。
コピペをしてもその状態を維持してくれるので、いちいち計算式を作らなくても、どんどん貼り付け、貼り付け、でOKです。
なお、表の左端のピンク色の列は、ア、イ、ウ、エ、オが下に向かってダーっと網羅して並んでいます。
これを手で打ち込むのは大変なので、表のB9セルに
=CHAR(9506+ROW()-9)
と記入し、下へコピーすれば、アイウエオ…と(ァィゥの小文字を含みつつ)並んでくれます。
この計算式は Excel で動きますが、LibreOffice では動きませんでした(9506などの文字コードに非対応)。手動で好きな文字を記入していってください。または次の手順でどうぞ。
(LibreOffice ver. 7.0.0.3 を使用)
1. これをコピーします → ア,ィ,イ,ゥ,ウ,ェ,エ,ォ,オ,カ,ガ,キ,ギ,ク,グ,ケ,ゲ,コ,ゴ,サ,ザ,シ,ジ,ス,ズ,セ,ゼ,ソ,ゾ,タ,ダ,チ,ヂ,ッ,ツ,ヅ,テ,デ,ト,ド,ナ,ニ,ヌ,ネ,ノ,ハ,バ,パ,ヒ,ビ,ピ,フ,ブ,プ,ヘ,ベ,ペ,ホ,ボ,ポ,マ,ミ,ム,メ,モ,ャ,ヤ,ュ,ユ,ョ,ヨ,ラ,リ,ル,レ,ロ,ヮ,ワ,ヰ,ヱ,ヲ,ン,ヴ
2. LibreOfficeで、空いている場所をクリックしてから、編集 メニュー>型式を選択して貼り付け>形式を選択して貼り付け
3. テキストインポートダイアログを使用する を選択して、OK ボタン。
4. 表示される画面の上のほうの、始めの行 は 1 、区切りのオプション は コンマ にチェックを入れて、OK ボタン。
5. すると横方向にたくさん並びます。それらを横方向に選択します。(アをクリックした後、右にスクロールし最後尾を探して、SHIFTキーを押しながら最後尾をクリック)
6. コピーする
7. これまで手順通り作ってきた表の B9 セルをクリック。(左端の列の一番上)
8. 編集 メニュー>型式を選択して貼り付け>形式を選択して貼り付け
9. 表示される縦長の小さな画面の左上の テキスト と、左下の 行と列を入れ替える にチェックを入れて、OK ボタン。するとアイウエオ…とすべて挿入されます。
「ア」が文字コードで言うと9506なんです。行が増えるたびに1を足していけば、「ア」に続く文字が出るでしょう、というものです。
ROW()は行番号に置き換わります。B9セルは9なので、9-9=0で、文字コードはそのまま9506、文字は「ア」です。
B10セルは10なので、10-9=1で、文字コードは1足して9507、文字は「ィ」です。
CHAR()はもうわかると思いますが、その文字コードを文字に置き換えるものです。
また、表の上端のオレンジ色の行で、「CPYィ」というセルがありますが、そのセルの下のF9セルは、
=$B9&REPLACE(F$8,FIND("CPY",F$8),3,$B9)
※この計算式は Excel でも LibreOffice でも動きました。
このような計算になっていて、”左端の文字列 + 「CPYィ」のCPYという文字列を左端の文字列に置き換える” という意味です。
たとえば、左端が「ミ」ならば、左端の文字「ミ」と、CPYで左端の「ミ」がさらに入り、つづいて「ィ」で、「ミミィ」になります。
左端が「サ」で上端が「リCPY」ならば、左端の文字「サ」と、「リ」とCPYで左端「サ」が入り、「サリサ」となります。
そのとき左端が「ア」なら「アリア」です。「タリタ」「マリマ」「ルリル」など。
ただし、「ァホイCPYッCPY!」のような2回以上はできず、CPYは1回だけ使えます。(もしできるなら、左端が「サ」だとサァホイサッサ)
このセルを下へコピーしていくことでその列はそういう計算をしてくれます。
試す場合は、F8セルに「CPYィ」と記入し、F9セルに上記式を記入して、動きを確かめてください。
動いたらF9セルを下へコピーしていきます。
動かない場合は、なんで動かないのか調べていると大変になるので、あきらめましょう。
※表の上端のオレンジ色の行で、たとえば「ーニィ」とハイフンから入力したとき上手くいかないことがあるかもしれません。その時は「'ーニィ」として「-」が何か機能しないようにアポストロフィーを付けます。
(訪問者のどんなニーズと この記事がつながるか)
10日間のお盆休み中は、ほぼ毎日海へ出かけ、浜辺の様子をケータイで写真撮影しました。
海水浴場ですから、毎年人混みになりますが、今年はコロナウイルスの影響でどうだったんでしょうか?
8/7(金) 初日 朝7:24 朝なので誰もいません。 置き去りにされた散らばったキッズサンダル1組をきちんと並べて置いてやりました。 |
8/8(土) 2日目 この日は確か、歯医者に行って、家でメンチカツを食べていました。 |
8/9(日) 3日目 午前9:54 海水浴来てますねぇ… でも、監視員がいないんです。 何かあったら、どうするの? |
8/10(月) 4日目 アセンブラの勉強のための液晶表示の準備で、午後くらいから深夜0時まで奮闘していました。 液晶が表示できたときは、そうりゃあもう嬉しかったです。 |
8/11(火) 5日目 夕方18:12 夕方なので、人はまばらです。 |
8/12(水) 6日目 午前10:55 全部見えるようにナナメ撮り。 |
8/13(木) 7日目 正午12:00 浜辺とは反対方向へ歩きました。 |
8/14(金) 8日目 正午12:43 ピンぼけた。 この状態で、去年の1/3くらいです。 ほんとにいっぱいになるとこの浜辺はぎゅうぎゅうになります。 比較画像 2020年のほうはなんとなくソーシャルディスタンスを取っているように見えなくもない |
8/15(土) 9日目 正午12:04 これも1/3くらいじゃないかなぁ。 車は多いけどね。写真に写っていないずっと奥にも駐車場が別途あり、たぶんそっちはガラガラだと思います。 |
8/16(日)最終日 夕方18:06 最終日で夕方ですからね。 なんという花か知りませんが、せっかくだからと撮影。 このケータイ、写真の写りがほんとに悪いンです。 |
そういうわけで、今年の海の 人の入りは去年に比べて1/3という感じでした。 せっかくの夏で、ずっと家にこもりきりで、もー我慢できんぞ! っていう気持ちもわからないでもないです。 でも、監視員がずっといなかったようで、たいへん危険な状態だったと思います。 中には家族全員短パン姿で足だけ海に入る、という方々もいました。 監視員がいないから泳ぐのはやめて、浜辺をできるだけ楽しもうという策だったんでしょうか。それも良いですね。 風物詩のスイカ割りというのも子供に体験させてあげると良いんじゃないかな。 |
また、アセンブラの勉強も毎日行い、今では「人様が作った I2C 通信の C言語プログラムをアセンブラで作り直せばあの問題が解決できる…」などと検討することができるようになりました。
RPG のコマンドメニューのアルゴリズムも決まったし、さしみやちらし寿司を作ったりビールを飲む等 のんびりと過ごせました。
このように、なんでもうまくいっているわけではありません。
(訪問者のどんなニーズと この記事がつながるか)
RPG の「コマンドメニュー」のアルゴリズムです。
考え抜いて、やっとで導き出した「かたち」なので、結構気に入っています。
今日はもうお盆休み終了で、時間がないので詳しい説明はできません。
以前紹介した「パレット」については、ある程度この中で生かされています。
簡単に言うと、
[1] 1つのことを実行する一連のメニューのうち「どうする? ~する」という動詞を決めるメニューだけにスクリプトを配置します。
[2] メニューを選び終えると、そのスクリプトを実行しますが、そのスクリプトの引数として、各メニューで決定した項目を渡します。
[3] それら引数は、「だれが」、「何を」、「使う」という、スクリプトの中で使いたい値なので、スクリプトで行いたいことをプログラムできます。
プログラムの試し方(キーボードが必要です):人が作ったプログラムは、説明がなければ、ほとんど読めないと思うので、今度説明出来たら…と思います。
まぁ、説明はちょっと足りない状態ですが、小中学生、高校生にはこういうのを見て参考にしてもらったら良いなと思っています。
なぜなら難しい部分(若い人には手が届きにくい部分)のアルゴリズムがわかれば、「RPG を作りたい」というような目標に近づくからです。
「アルゴリズムには著作権がない」と言われているので、このかたちの良さがわかる人は著作権等気にしないで利用してください。
このかたちの価値がどれだけ人にわかってもらえるかはわかりませんし、私自身も後日別のアルゴリズムのほうがいいと言うかもしれませんが。。
(訪問者のどんなニーズと この記事がつながるか)
int a;
と宣言したとき、a は -100 とか 200 とか使える状態で、つまり正負のある signed int に、暗黙になる。
だから、
char a;
としたとき、同じように signed char になるのかと思ってプログラムを作っていたら、なんかおかしい。
char の場合は上記のように書くと暗黙に正負のない(=正だけの) unsigned char になるのか…。
char型は文字を示すのに使われるから、基本的に 0~255 (文字番号)だもんな…。
signed にしちゃうと、-128 ~ 127 になってしまうから困るよな…。
だから省略したときは基本的に文字で使うための unsigned にしますよってことか…。
つぶやきでした…。
8月9日に頑張って小型液晶ディスプレイ を使えるようにして、昨日今日と勉強を開始できています。
せっかく頑張ってそういう道具を用意したので、どんな感じで勉強しているのか、ちょっと紹介しようと思います。
本はこの本を読んでいます。
たとえば、その本で掲載されているアセンブリ言語のプログラムがこのようにありまして…
普通はこのプログラム↑を「CASL II/COMET II」のシミュレーターソフト(WCASL II)上で入力して、アセンブルし、動かします(下図)。
▼「WCASL II」の画面
このように、プログラムの動きを見ながら本を読み進めていくことができるので、理解しやすく、勉強になります。
しかし、今回は一歩進めて、上記のほか PIC マイコン上でも動かすことにしました。
PIC マイコンの開発環境(MPLAB-IDE)上で PIC 用のアセンブラプログラム(C言語内のインラインアセンブラ)を作成し、コンパイルし、動かします(下図)。
▼「MPLAB-IDE」の画面
(この画面は、1つのプログラムファイルを、左右で画面分割して2画面で表示している状態です)
大変だった☆
…のように、いろいろ調べて大変でした。
この MPLAB-IDE の画面上で「Make and Program Device」というボタンを押すと、C言語プログラムがコンパイルされて、出来上がった機械語が…
…こういう流れで PIC マイコンへ書き込まれ、マイコンが動作開始します。
動作開始すると、アセンブラプログラムの通りにデータが加工されて、プログラムの最後にはその結果を小型液晶へ送信するようになっています。
(動画がピンボケですが、)
「Asm P93」 アセンブラの本のP93のプログラム、という意味。
プログラムは 「掛け算を行うプログラム」で、4×3の答え、「12」が2行目に表示されています。
頑張って小型液晶を用意して、こんな感じで勉強できております、というわけです。
(訪問者のどんなニーズと この記事がつながるか)
くぅ~、これだけのことがなかなかできんのですわ~! ↓↓↓
このお盆休み中にプログラミング言語の「アセンブラ」の勉強をしようと思っています。
なぜアセンブラなのかというと、アセンブラを勉強するとコンピューターの基礎を学ぶことができ、それが日ごろのプログラミングの糧にもなるからです。
私はプログラミングが結構好きなので、もっと自分のその技術を磨いてみると良いと思いました。
電子工作の世界で人気の高い「PIC マイコン」にアセンブラコードを流して(実際はアセンブラコードをアセンブルして機械語になったものを流します)、その動きを実際に見れば効果的に勉強できると思います。
PIC マイコンはそのままではプログラムを動かした結果を見ることができません。パソコンのようにディスプレイが用意されていないんです。
簡単には LED の点滅のしかたでプログラムの結果を判断するという方法もありますが、それだとなかなか大変です。
今回のようにアセンブラの書籍を見ながら勉強し、そのサンプルプログラムを動かすという場合は、LED で結果を知るよりは、文字や数値で結果を見るほうが、勉強もスムーズに進むでしょう。
それで、PIC マイコンで液晶表示を行おうとしています。
(以上は5W1Hを気にした文章です。以降は気にしていない文章です)
本日午後15時ごろ開始して、深夜23時現在、やっとで液晶へ表示することができました。(私のお盆休み中のアセンブラの勉強で使うものなので、いつものPC使用時間制限を行いませんでした)
前にもやったこの液晶表示ですが、同じ液晶ではあったんですが今回はマイコンがちょっと違うんです。
前回は PIC24H という 16 ビットマイコンを使いました。液晶のために必要な I2C インターフェース(マスター、スレーブ)をハードウェアで搭載していて、大変でしたが表示できました。
今回は PIC16F88 という 8 ビットマイコンを使いました。このマイコンは、I2C インターフェースのスレーブ(電話機で言う子機)の機能をハードウェアで搭載してますがが、マスター(電話機で言う親機)の機能がありません。
問題の液晶は、I2C のマスターと通信をする「スレーブ」仕様なので、マスターになれない PIC16F88 と小型液晶(AQM0802A)は通信できない、ということになります。そんなバカな。
ところが、インターネット上で探してみると「I2CがなくてもI2C通信する」ということをやっている方がいました。
「I2C をソフトウェアで実装する」というもので、その方のプログラムを「改変しても良い」ということだったので改変して使わせてもらいました。
ありがとう。
最終的な解決は、別の方の こちらのページ で I2C のデータ送信のフォーマットが簡潔に図示されていて、自分の間違いに気づきました。
こちらも、ありがとう。
それで液晶表示に至りました。
なんとかアセンブラの勉強のために道具を用意できたので良かったです。
液晶表示がないと、アセンブラプログラムの結果の数値とか表示できなくて大変だから。
改善版プログラムリスト(不具合を直して、見た目を少し整えました)
(このプログラムリストは、上表右下の※AリンクのWeb ページに掲載されていたソースコードをもとに私が改造したものです。そのWeb ページで「個人の趣味の範囲であれば自由に使用し、改造も自由に行って下さい」とあったので、改造&掲載させてもらいました。I2CのないマイコンでI2Cを行う方法を探している方もいると思うので。)
プログラムリストはだいぶ荒れている状態ですが、MPLAB-IDEのXC8コンパイラでコンパイル可能を確認しています。
PIC16F88マイコン、液晶AQM0802A-RN-GBW、それぞれ特に変わったところのない当たり前の配線になっていると思います。液晶の配線がごついですが、説明書(データシート)の通りの配線です。
このマイコンは 5V 電源で動作するので、回路全体も5Vです。
液晶AQM0802A-RN-GBWは3.3Vで動作する製品ですが、最大定格(越えてはいけない電圧)が ~5.5V なので、なんとか5Vで大丈夫みたいです。この液晶はネットでも5V回路で使っている方がいるようです。5.5Vは超えないように気を付けましょう。
※下図は上記のプログラムリストで書かれている、動作確認用のLEDが接続されていません。しかし動作確認のLEDは点灯するだけのものなので、あってもなくてもプログラムは動作すると思います。
以上の作業の中で「なんで動かないのか原因を探るため」や「自分の疑問に応えるため」に、オシロスコープを使って次のような調査を行いました。
◎疑問1 「I2Cのフォーマットのとおりに、信号が出ているだろうか?」
オシロスコープのトリガの機能を用いて、信号が出るタイミングでオシロスコープを停止させ、オシロスコープのハードコピー機能でUSBメモリへ画像を保存し、Excel の図形編集で横につなげました。
こうやってみると、ちゃんとプログラムしたとおりの信号が出ているなと、実感できます。
◎疑問2「"DRAM"という文字列を出力しているが、画面に出ない。ほんとうにDRAMと出力しているのだろうか?」
同様に画像をつなげました。これが "DRAM" の文字を送っている信号ではないかと思うんですが…
"DRAM" のそれぞれの文字の文字コードを液晶のデータシートを見て調べて、「I2Cのクロック信号の幅」で2進数をそれぞれ並べました。
青ピンが0、赤ピンが1です。
なお、「クロック信号の幅」(赤青ピン同士の間隔)は、疑問1の図の青い信号を見ながらExcelで図形をあてがって間隔を取得しました。
パズルのピースみたいにそれぞれの文字が、信号のどこかに合致するといいんだけど…
おおっ気持ちよく合いました☆
赤い枠のあいだの大きな黄色の山は、液晶がマイコンの指示に対して送った「了解」という意味のackという信号ですね、たぶん!
その黄色の山のせいで、合わないなぁと最初思っていました!
…で、"DRAM" の文字が液晶に出ない原因は、上図の信号では実はダメで、上図はデータ、データ、データ…と続いていますが、正しくは、コントロールデータ、データ。コントロールデータ、データ。コントロールデータ、データ。と送る必要がありました。
そして、コントールデータを付けてもまだダメだったんですが、それはコントロールデータの内容が私のほうで間違っていたからでした。
そこまで直したら、ちゃんと液晶に表示されました。表示されたときは、そりゃぁもう嬉しかったです!
(訪問者のどんなニーズと この記事がつながるか)
前の仕事をしていたとき、「3か月間の出張でホテル住まいで夜勤(22時ホテル出る、翌8時ホテル戻る)」を2,3度繰り返す等、きつい仕事が多く、虫歯があっても歯医者に行く気になれず放置していました。(本当は、「歯医者に行くのが恥ずかしくて嫌だ」と思っていました…)
それが悪化して、両親から「歯医者に行け」ときつく言われて、今年の1月からずっと歯医者に通っています。
上の奥歯は完全にダメになっていたので、抜歯をしました。
一般に、上の奥歯の根っこは鼻の周辺の空洞に近接している場合が多く、抜歯をしたタイミングで抜歯の穴と鼻の穴が貫通する場合も、たまにあるそうで、私は貫通してしまいました。
→ → → |
口の中の雑菌が鼻に入ると、蓄膿症になってしまい、それは「歯性上顎洞炎」(しせい じょうがくどう えん)と言うのだそうです。
つまり、「歯科における、鼻の空洞の炎症」という意味です。歯科ではない蓄膿症は単に「上顎洞炎」と言うそうです。
それが今年の2月あたりに始まり、今は貫通はふさがり、その炎症も おさまってきていて、早く完治してほしいと思っているところです。
下の奥歯も虫歯になっていて、それは「薬を仕込んでフタをする」という方法で落ち着いていたんですが、この前その歯が 欠けて しまい、中の薬が取れてしまいました。
今日はその歯に金属の かぶせ物をしてもらいました。
最近の歯医者さんは進んでいるようで、その かぶせ物も とても自然な感じがして、下の歯に限っては ひとそろい そろった状態になりました。
ただ、私は体が結構、 昔からの仕事のしすぎで消耗しきっていて、歯も若いころよりもだいぶ もろくなっています。
せっかく綺麗に整えてもらっても、またいつダメになるかという心配があります。
歯医者の帰りに近所の肉屋でその土地の名前が付いた「×××メンチ」というメンチカツ2つ(単価230円)と、常陸牛入りのハンバーグ1つ(単価360円)、せんキャベツ1袋(単価100円)を買いました。
歯をいじった直後だったので、やわらかい食事が良いかなと思って。
メンチカツがだいぶンまかった。ンマンマでした。
(なんでこんなことを書くのかと言うと、毎年お盆休みなど長い休みは、毎日外へ出かけて海など風景写真を撮っているのに、今日は撮り忘れたから。なんらか記録をと。)
(訪問者のどんなニーズと この記事がつながるか)
今日は、「店」のシステムを作っていました。
ドラクエみたいですけど、あとで自分仕様に作りかえるつもりです。
(訪問者のどんなニーズと この記事がつながるか)
お盆なので、おそなえものを買ってきました。
去年、同じものを購入して、そのとき母が言ったのは、「おそなえもの(お供え物)をすると、亡くなったおばさんたちが喜ぶ」ということでした。
お盆は8月15日に行うもので、祖先の霊をまつる一連の行事のことです。
最近の、私を含めた若い人たちは、こういう行事の作法がわからないひとが多いですよね。
私もおそなえものを買ってきてテーブルの上にドンと置いて、「ハイどーぞ」と言って一人で笑ってる ありさま ですから。
買ってきた物の、かごの裏を見ると、品物のリストがありました。
あなたの産地はありますか?
このように いろいろな品物で もてなしてくれれば、誰でもありがたいと思うことでしょう。
飽食の時代にあっては、これらのたくさんの品物が ありがたいことであることを忘れてしまっています。
こんなにいろいろあるよ。どうかな。うれしいでしょ。という感じです。
誰かをもてなすってこういうことなんでしょうか。
誰かを家に招待するときは、いろいろ用意すると良いのかもしれません。
ウェブページ(ホームページ)もそうなのかな。
(訪問者のどんなニーズと この記事がつながるか)
また長い期間休みなので、今回も何か勉強しようと思います。
同じ本を使ってアセンブラの勉強をしようと思います。
▼この本
今回でもう4~5度目くらいになるのかな。最初に買って読み始めたのは、カラオケの店長業務をやっているとき、仕事を終えて家で布団の中に入り読んでいたのが最初だったかな。小学生の頃に買った SOFTBANK の「MSXマシン語」の本はマシン語=アセンブラなので同じ内容の本だったと思いますが、当時は買っただけで1ページも読まず、本棚に飾っていただけだったので、この写真の本は喜んで読み始めました。
以下はこの本に対して、私がアマゾンに投稿したレビューです。
今回はこれまでの読み方と違って、PICマイコン(電子回路でC言語やアセンブラなどプログラムを書きこんで動かせるIC )にアセンブラコードを書き込みながら読み進めようと思います。
コンデンサとトランジスタを使った、「DRAM メモリー回路」の記事は現在滞っていますね。(もうすぐDRAMについての次の記事のための部品を購入するところです)
「DRAMメモリーなど、ハードウェアのしくみを知ることが、プログラミングの力を大きく引き上げる」
私はそう言って DRAM のしくみを説明してきました。
「そうなんだ」と思って読んでくれた人もいるかもしれません。
メモリーのしくみを知ることも、アセンブラを勉強することも、どちらも「プログラミングの力を大きく引き上げる」ことにつながると私は思っています。
Java言語を使うシステム開発の現場で、コンデンサとトランジスタというレベルでのメモリーのしくみを知っているからと言って、何か特別な応用が利くというわけではありません。
車を運転するとき、エンジンルームの動きを知っているのと知らないのとでは、本人の車に対するやる気(テンション)が異なる。というものです。やる気がある人はいろいろなものを吸収しやすい状態だと思います。
それが「プログラミングの力を大きく引き上げる」ということです。
また、システムの内側を知っている人ほど、そのシステムに起こったことについて適切な認知を行うことができ、無駄のない処置を行うことができる、というのも、「プログラミングの力を大きく引き上げる」ということになると思います。
車に例えて言うと、車の駆動部で何か音が鳴って故障したら、「ああ、あれかな」とすぐにわかっちゃう状態です。
これらを一言で言うと「つかいこなす」ということです。
現場の仲間や、お客さんが求めるのは高い技術だけでは けっしてなく、人柄が重要な条件になっています。 これはけっこう動かない事実ではないでしょうか。 |
人柄をおざなりにして、技術ばかり磨くのは、技術を楽しんでいるだけの「あそび」かもしれません。(私自身のことを言っていますが、だれでもそうなりがちだとは思います) 技術を身に付ける人というのは、もしかしたら自分の人柄がどうなっているかということも気にしなければならないのかも しれません。 「ゲワイ! おまえが人前で褒められて、うれしそうにしているのが、気に入らない。むかつく」 技術ばかり先行していても、いつのまにか白い目で見られています。 それを解決する糸口の1つとして、その技術は本当に自分だけの力で身に付けたのかどうか、と疑ってみると良いです。技術を楽しむだけではなく、自分の技術のルーツはどうなっているのか真剣になって思いめぐらしたほうが良いかもしれません。 できれば、自分の技術は誰々のおかげによるもので、それが当たり前だ。といつも思っているのが理想ですね。 現場で自分が弱いと思っている人ほど、どうしても高い技術で自分を見直してもらおうと思ってしまいます。もっと自分の弱さや絶対的な前提条件を直視出来たら良いですね(これはあきらめることとは違います。自分(弱さ)を正しく認知することでそれを確かな土台として次へ進むことができます)。 それとも現場はもっとあなたの良いところに気づく必要があるんでしょうか。 「自分の弱さを直視する」というのは、たとえば今 目の前であなたのミスによって人々に迷惑が及んだとします。その状況を「こんなはずじゃない」と思うのは普通ですが、「もしかしてこれが自分なのか」とちょっと思ってみることです。「失敗ばかりしている自分」と思うことができれば、「失敗ばかりしているあなた」という周りが思っていることとのギャップがなくなり、あなたと周囲の人々との共通認識が生まれます。 そこで初めてスムーズな人間関係になると思うんですが、どうでしょうか。 ミスをした後、しばらくミスがないからと言って「これが本来の自分の姿。維持しよう」と思わないことです。もちろんミスがない状態を維持することは大切なことですが、失敗や失敗する自分を忘れないで認識し続けることも必要なんじゃないかと思うんです。 現場はあなたの高い技術を必要としていません。あなたがあなたの弱さを改善しようとしている姿を求めています。もちろん高い技術を学ぶなと言っているのではなく、たくさん学ぶと良いと思います。 (ある人(私)にはあてはまり、ある人にはまったくあてはまらないお話です) 軽いジョークをどれだけ流暢に言えるかというのも意外と重要だったりします。 白い歯を見せて、口角を上げて、「ジョーク、ジョーク」とMr.サタンみたいに言うとか。 ジョークのバリエーションについて、ある程度クリエイティブになれると良いんですけどねぇ… |
私はプログラミングが結構好きなので、今年もまたアセンブラを勉強することにしました…。
(ほかにやることがあるような気もするけど。ひまろに頼まれた絵とか)
……で、その1日目として本の「はじめに」のページを読み始めたところですが、私がさきほど述べた「アセンブラを学ぶ意義」について書かれています。
「――いまや、パソコンをはじめとするコンピュータ・システムは複雑化・肥大化しており、内部の仕組みを全く知らなくても利用することができるようになっています。それゆえに、コンピュータの中核は、厚いベールに包まれて、本質を垣間見ることさえ難しくなってしまいました。しかし、コンピュータを学ぼうとする読者の皆さんにとって、仕組みの基本を理解することは、必須です。技術は日進月歩で進化していますが、その基本はコンピュータの誕生以来、ほとんど変わっていないからです。ハードウェアと深く結びついたアセンブリ言語を通して、コンピュータの本質に迫っていただきたいと思います」(※「はじめに」から引用)
うーん、さすがに学校の先生であって初心者に対する本もいくつか執筆している方の言葉なので、私と違って説得力がありますね。
「アセンブラでコンピュータの基本が学べますよ」と理解しやすい言葉でおっしゃっています。
「コンピュータの内部で何が行われているのか?その舞台裏を学習することは、よりよいプログラミングを行う糧となることでしょう」(P10から引用)
これは大きい。
(訪問者のどんなニーズと この記事がつながるか)
NHK のコロナウイルスのデータを見ていて、第一波と第二波はどちらのほうが伸び方が急峻なのか?と疑問が浮かび、簡単に図にしてみました。
グラフは NHK のサイトの「都道府県ごとの感染者数の推移」グラフを、「東京都」、「累計」の設定で表示し、スクリーンショットを撮り、私のほうで傾きを示す太線(青、赤)を追加したものです。
第一波:上図、 第二波:下図
第二波(赤太線)のほうが傾きが急峻になっています。
第一波は角度17度で、第二波は角度28度です。その差は11度です。(用心深く悪いほうにとらえて)第一波を「おおむね15度」、第二波を「おおむね30度」とすれば、約2倍になっています。
つまり第一波よりも第二波のほうが、一日当たりの感染者数が2倍ちかくになっているということです。
ウイルスからすれば、第一波よりも第二波のほうが、「より感染しやすくなっている」ということですかね。
人間からすれば、第一波でいろいろと活動を我慢してきたので、規制を解除したのを機に、うっぷんを晴らすように、人と会って いっぱいしゃべりたかったことをしゃべったりしたってことでしょうか? …だって「規制を解除」というのは「将来ウイルスはなくなっていく」という考えにつながるものだからね…
私も第二波のほうが大きくなるとは予想していなくて、おどろいています。
規制を解除(5/25)してすぐに感染者が増えるのではなく、潜伏期間があるので、2、3週間後に増え始め、1ヶ月後にグングン増えている形になっています。
人間の心理とウイルスの発生に「1か月ちょっと」というタイムラグがあるみたいです。
たとえば、
このように心理とウイルスのあいだのタイムラグが「1か月ちょっと」あるみたいで、これが正しいとすれば、
今 8/1 はもう一度緊急事態宣言されるのかどうかといったところで、もし宣言されたら「また大変だ」と人々の心が動き、その「1か月ちょっと」、1か月半から2か月後の 9/15 ~ 10/1 ごろ、収束したような感じになる。
…ということでしょうか。しかし人々も慣れてきているので対応が早くなり、もしかしたら 9/5 くらいにはおさまっているかもしれません。
まぁ、先のことが予測できたとしても、それで何ができるかと言うと…、できることはあまりなさそうですが、「情報は力なり」というのもあるので、情報の1つとして知っておくと良いかもしれません。
しかし、このように「誰かが何かを個人的に分析」して、それを読んだ人が合点して、SNSで拡散し、「憶測が流れる」と問題視されている(Bingで検索)ので、私のような素人の話は「そうかもね」程度にとらえてもらうのが良いと思います。
私が言いたかったのは「第一波よりも第二波のほうが、東京都の感染者累計が急峻」という1つだけです。
余談:
…いつものように、こういう他者が作った図(統計グラフ)を、気軽にコピーして自分のWeb ページに掲載するのって良いのかな?と調べてみました。
グラフは「単なる事実」なので、著作性はないそうです。ただしデータの編集のしかたによっては「編集著作物」になりうるので注意とのこと。
そういうわけで、NHKさんからちょっと図を拝借します。
なお、私の家族がコロナウイルスについてどんな様子かというと、このまえ父の日でプレゼントを贈ったときに、父(私の住まいから電車で3時間離れた場所に実家がある)から電話がかかってきてプレゼントの話をした他に、「そっちでコロナはどうなんだ?」と聞かれて私は「職場がいろいろ対策をしている。感染者は いまのところ出ていない」というような話をしていました。
(訪問者のどんなニーズと この記事がつながるか)
<!DOCTYPE html><!--ESCAPEPROCESS-->
<head>
<script>
function onloadx() {
//一般関数
console.log( "文字列" );
}
function Class1() {
//クラス
console.log( "文字列" );
}
Class1.prototype.method1 = function() {
//メソッド
console.log( "文字列" );
}
</script>
</head>
<body onload="onloadx();" style="">
Hello world!<BR>
</body>
</html>
<!DOCTYPE html><!--ESCAPEPROCESS-->
<head>
<script>
function onloadx() {
//一般関数
console.log( "文字列" );
}
function Class1() {
//クラス
console.log( "文字列" );
}
Class1.prototype.method1 = function() {
//メソッド
console.log( "文字列" );
}
</script>
</head>
<body onload="onloadx();" style="">
Hello world!<BR>
</body>
</html>
<!DOCTYPE html><!--ESCAPEPROCESS-->
<head>
<script>
function onloadx() {
//一般関数 コメント変更
console.log( "文字列変更" );
行追加
}
function Class1() {
//クラス コメント変更
console.log( "文字列変更" );
行追加
}
Class1.prototype.method1 = function() {
//メソッド コメント変更
console.log( "文字列変更" );
行追加
}
</script>
</head>
<body onload="onloadx();文字列変更" style="">
Hello world!<BR>
HTML追加
</body>
</html>
<!DOCTYPE html><!--ESCAPEPROCESS-->
<head>
<script>
function onloadx() {
//一般関数 コメント変更
console.log( "文字列変更" );
行追加
}
function Class1() {
//クラス コメント変更
console.log( "文字列変更" );
行追加
}
Class1.prototype.method1 = function() {
//メソッド コメント変更
console.log( "文字列変更" );
行追加
}
</script>
</head>
<body onload="onloadx();文字列変更" style="">
Hello world!<BR>
HTML追加
</body>
</html>